package com.c2b.algorithm.leetcode.hot100;

/**
 * 搜索旋转排序数组
 * @author c2b
 * @since 2022/5/5 8:59
 */
public class Hot033Search {

    private Hot033Search(){}

    /**
     * 整数数组 nums 按升序排列，数组中的值互不相同 。
     *
     * 在传递给函数之前，nums 在预先未知的某个下标 k（0 <= k < nums.length）上进行了旋转，使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]]（下标从0开始计数）。
     * 例如，[0,1,2,4,5,6,7]在下标3处经旋转后可能变为 [4,5,6,7,0,1,2] 。
     * <p>给你 旋转后的数组 nums 和一个整数 target，如果nums中存在这个目标值target，则返回它的下标，否则返回 -1 。
     * <p>---------------------------------------
     * <p>输入：nums = [4,5,6,7,0,1,2], target = 0
     * <p>输出：4
     * <p>---------------------------------------
     * <p>输入：nums = [4,5,6,7,0,1,2], target = 3
     * <p>输出：-1
     * <p>---------------------------------------
     * <p>输入：nums = [1], target = 0
     * <p>输出：-1
     * <p>---------------------------------------
     * @param nums 旋转后的数组
     * @param target 目标值
     * @return 如果nums中存在这个目标值target ，则返回它的下标，否则返回 -1
     * @author c2b
     * @since 2022/5/5 9:00
     */
    public static int search(int[] nums, int target) {
        int length = nums.length;
        if (0 == length) {
            return -1;
        }
        if (1 == length) {
            return nums[0] == target ? 0 : -1;
        }
        // 二分查找
        int left = 0;
        int right = length - 1;
        while (left <= right) {
            int mid = ((left) + (right - left)) / 2;
            if (nums[mid] == target) {
                return mid;
            }
            if (nums[0] < nums[mid]) {

            } else {

            }
        }
        return -1;
    }
}
